from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.viewsets import ReadOnlyModelViewSet

from apps.meiduo_admin.serializers.order import OrderSimpleSerializer, OrderSerializer
from apps.meiduo_admin.utils.pagination import MeiduoPagination
from apps.orders.models import OrderInfo



#订单表的查询  包括一条订单数据的查询，同时也包括多条数据的查询
class OrderViewSet(ReadOnlyModelViewSet):
    # queryset = OrderInfo.objects.order_by('-create_time')

    #里面存在着搜索的部分  涉及模糊查询的操作
    #故需要重写视图集的部分
    def get_queryset(self):
        #从查询参数里面得到查询数据
        keyword = self.request.query_params.get('keyword')

        #接受查询语句
        queryset = OrderInfo.objects
        if keyword:
            queryset = queryset.filter(order_id__contains=keyword)
        queryset = queryset.order_by('-create_time')
        return queryset
    # serializer_class = OrderSimpleSerializer
    def get_serializer_class(self):
        #查询一个时详情页的数据搜索 里面的数据很多
        if self.action == 'list':
            return OrderSimpleSerializer
        #查询多条 是简单的数据查询
        elif self.action == 'retrieve':
            return OrderSerializer
    #获取详情页订单
    pagination_class = MeiduoPagination

    #修改订单的状态  可以直接通过装饰器的方法 将put方法进行装饰起来
    # detail=True===>put /orders/(?P<pk>[^/.]+)/status/
    # detail=False==>put /orders/status/
    @action(methods=['PUT'],detail=True)  #需要指定订单
    def status(self,request,*args,**kwargs):
        instance = self.get_object()  #得到要修改订单的对象
        instance.status = 3
        instance.save()
        return Response({
            'order_id':instance.order_id,
            'status':instance.status
        })
